package cn.doitedu.javase.io;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.*;

public class _11_ObjectOutputStream和ObjectInputStream基本api {

    public static void main(String[] args) throws Exception {

        Student s1 = new Student("亚文", 18, 28000, true);

        // 想把上面生成的对象持久化保存到文件中（或者通过网络发送给别的机器上程序）

        FileOutputStream fileOutputStream = new FileOutputStream("e:/s1.obj");

        //ObjectOutputStream就是java中自带的一个对象序列化工具
        // 它的功能就是帮用户把一个对象变成一个二进制序列（利用的就是DataOutputStream）
        // 至于二进制序列输出到哪？取决于它包装的基础流
        // 能够被ObjectOutputStream序列化的对象，必须实现Serializable接口
        ObjectOutputStream oo = new ObjectOutputStream(fileOutputStream);
        oo.writeObject(s1);

        oo.close();
        fileOutputStream.close();

        // ObjectInputStream就是一个反序列化工具
        // 它可以将ObjectOutputStream所生成二进制序列，反序列化成一个java的对象
        ObjectInputStream oi = new ObjectInputStream(new FileInputStream("e:/s1.obj"));
        Student stu = (Student) oi.readObject();
        System.out.println(stu);


    }


}


@Data
@AllArgsConstructor
@NoArgsConstructor
class Student implements Serializable {
    private String name;
    private int age;
    private float salary;
    private boolean isMarried;
}